home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / cross / Avr.lha / Atmel / Asm / examples / SCAN.ASM < prev    next >
Assembly Source File  |  1999-06-12  |  719b  |  44 lines

  1.  .include "io2313.inc"
  2.  
  3.  ldi R16,$0F
  4.  out DDRB,R16
  5.  swap R16
  6.  out PORTB,R16      ;Pull inputs high.
  7.  
  8.  ser R16
  9.  out DDRD,R16
  10.  
  11. SSCAN:
  12.  ldi R17,254         ;11111110 walking zero
  13. CSCAN: 
  14.  out PORTB,R17
  15.  in R18,PINB
  16.  clc
  17.  clr R19
  18.  ori R18,$0F
  19.  com R18
  20.  breq NOKEY
  21. FA:
  22.  rol R18
  23.  inc R19
  24.  brcc FA       ;Find a 1, count the positions.
  25.  mov R16,R17
  26.  ror R16
  27. FB:
  28.  ror R16       ;Already know its more than 0
  29.  brcc GOTKEY
  30.  subi R19,-3   ;Add 3 to key count to move to next row.
  31.  rjmp FB
  32. GOTKEY:        ;R19 now contains the number of the key pressed.
  33.  out PORTD,R19
  34.  
  35. NOKEY:
  36.  ldi R23,30
  37.  
  38.  sec
  39.  rol R17
  40.  cpi R17,$EF   ; Reset keyboard walker when its done all.
  41.  brne CSCAN
  42.  rjmp SSCAN
  43.  
  44.